package br.com.advance.automacao.web.graficos.equipamento;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.apache.log4j.Logger;
import org.primefaces.model.chart.Axis;
import org.primefaces.model.chart.AxisType;
import org.primefaces.model.chart.BarChartModel;
import org.primefaces.model.chart.ChartSeries;
import org.springframework.beans.factory.annotation.Autowired;

import br.com.advance.automacao.services.CLPService;
import br.com.advance.automacao.services.dto.EficienciaCLP;
import br.com.advance.automacao.web.utils.BaseBean;

@ManagedBean
@ViewScoped
public class EficienciaPorLinhaMBean extends BaseBean {

	private static final Logger logger = Logger.getLogger(EficienciaPorLinhaMBean.class);
	private static final long serialVersionUID = 2744482930516312889L;

	private BarChartModel grafico;
	private List<EficienciaCLP> listEficienciaPorLinha;

	@Autowired
	private CLPService clpService;

	public void initialize() {
		logger.info("initialize...");
		listEficienciaPorLinha = clpService.buscarEficienciaCLPs();
		gerarGrafico();
	}

	public void atualizar() {
		logger.info("atualizar...");
		listEficienciaPorLinha = clpService.buscarEficienciaCLPs();
		gerarGrafico();
	}

	private void gerarGrafico() {
		if(listEficienciaPorLinha == null || listEficienciaPorLinha.isEmpty()) {
			return;
		}
		grafico = initBarModel();

		grafico.setTitle("Eficiência por linha CX (%)");
		grafico.setLegendPosition("ne");
		grafico.setAnimate(true);

        Axis xAxis = grafico.getAxis(AxisType.X);
        xAxis.setLabel("Percentual");

        Axis yAxis = grafico.getAxis(AxisType.Y);
        yAxis.setLabel("Equipamentos");
        yAxis.setMin(0);
        yAxis.setMax(100);
	}

	private BarChartModel initBarModel() {
        BarChartModel model = new BarChartModel();

        ChartSeries cx = new ChartSeries();
        cx.setLabel("Equipamento");

        for(EficienciaCLP bean : listEficienciaPorLinha) {
        	cx.set(bean.getNome(), bean.getGef());
        }

        model.addSeries(cx);

        return model;
    }

	public BarChartModel getGrafico() {
		return grafico;
	}

	public void setGrafico(BarChartModel grafico) {
		this.grafico = grafico;
	}

	public List<EficienciaCLP> getListEficienciaPorLinha() {
		return listEficienciaPorLinha;
	}

	public void setListEficienciaPorLinha(
			List<EficienciaCLP> listEficienciaPorLinha) {
		this.listEficienciaPorLinha = listEficienciaPorLinha;
	}

}
